bfiber_1000
Boost.Fiber when_all, return values
when_all, return values - 반환 값
모든 작업 함수에서 반환 값을 수집하자마자 wait_first_value()의 queue
그러나 실제로 여러 값을 수집하면 흥미로운 질문이 제기됩니다.
우리는 그들 중 가장 느린 것이 도착할 때까지 정말로 기다리고 싶습니까?
결과가 나오는 대로 각 결과를 처리하지 않겠습니까?
다행히 두 가지 API를 모두 제공할 수 있습니다.
shared_ptr
wait_all_values_source()가 주어지면 wait_all_values()를 구현하는 것이 간단합니다.
다음과 같이 호출될 수 있습니다.
wait_all_values()의 루프에서 볼 수 있듯이 호출자에게 값을 계산하도록 요구하는 대신 완료되면 대기열을 buffered_channel::close()로 wait_all_values_source()를 정의합니다.
그런데 어떻게 그렇게 할 수 있나요? 각 생산자 파이버는 독립적입니다.
buffered_channel::push() 값이 마지막인지 여부는 알 수 없습니다.
queue<>에 대한 계산 파사드(façade)를 사용하여 이 문제를 해결할 수 있습니다.
실제로 우리의 파사드는 대기열의 생산자 측만 지원하면 됩니다.
[wait_nqueue]
nqueue<>로 무장하면 wait_all_values_source()를 구현할 수 있습니다.
wait_first_value()처럼 시작됩니다.
차이점은 queue
그런 다음, 물론 첫 번째 값을 팝하고 큐를 닫고 반환하는 대신 단순히 shared_ptr